package service

import (
	"fmt"
	"github.com/aceld/zinx/ziface"
	"time"
)

//玩家相关逻辑

type Role struct {
	ID       string
	Username string
	Nickname string
	Sex      int8
	Score    int
	Level    int
	Status   string
	ticker   *time.Ticker
	Conn     ziface.IConnection
}

// NewPlayer 创建一个新的Player实例，并启动定时器
func NewPlayer(id, username string, score, level int, status string) *Role {
	p := &Role{
		ID:       id,
		Username: username,
		Score:    score,
		Level:    level,
		Status:   status,
		ticker:   time.NewTicker(1 * time.Minute),
	}
	go p.startPersisting()

	return p
}

//进入游戏
func (r *Role) StartGame() error {
	// 开始游戏
	//进入游戏后将role添加到角色管理器
	return nil
}

//退出游戏
func (r *Role) EndGame() error {
	// 结束游戏
	return nil
}

func (r *Role) SaveGameStatus(status string) error {
	// 保存游戏状态
	return nil
}

func (r *Role) AddScore(score int) error {
	// 增加积分
	return nil
}

func (r *Role) LevelUp() error {
	// 升级
	return nil
}

// startPersisting 启动一个goroutine，每分钟自动持久化玩家数据
func (r *Role) startPersisting() {
	for range r.ticker.C {
		err := r.persist()
		if err != nil {
			fmt.Println("Error persisting player data:", err)
		}
	}
}

// persist 将玩家数据持久化到数据库
func (r *Role) persist() error {
	// TODO: 将玩家数据保存到数据库
	fmt.Println("Persisting player data...")
	return nil
}
